package com.magicsoft.app.helper;

import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;

/**
 * @author ender
 * 
 */

public class GPSHelper {

	private static final String TAG = "GPSHelper";

	private LocationManager locationMangaer = null;
	private LocationListener locationListener = null;

	private Context context;

	private Boolean flag = false;

	private String cityName = "";

	// public GPSHanlder handler;

	// public interface GPSHanlder {
	// void completedGSP(String cityname);
	// }
	//
	// public GPSHelper(Context context) {
	// this.context = context;
	//
	// locationMangaer = (LocationManager) context
	// .getSystemService(Context.LOCATION_SERVICE);
	//
	// locationListener = new MyLocationListener();
	// cityName = context.getResources().getString(R.string.beijing);
	// }
	//
	// public void startGPS() {
	//
	// flag = displayGpsStatus();
	// if (flag) {
	//
	// Log.e(TAG, "Your GPS is: ON");
	//
	// // 网络gps NETWORK_PROVIDER //硬件gps GPS_PROVIDER
	// locationMangaer.requestLocationUpdates(
	// LocationManager.NETWORK_PROVIDER, 5000, 10,
	// locationListener);
	//
	// } else {
	//
	// Log.e(TAG, "Your GPS is: OFF");
	// // alertbox("GPS状态", "你的GPS未开启，为了更好使用本APP，请开启");
	// if (handler != null) {
	// handler.completedGSP(cityName);
	// }
	// }
	// }
	//
	// private Boolean displayGpsStatus() {
	// ContentResolver contentResolver = context.getContentResolver();
	// boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
	// contentResolver, LocationManager.NETWORK_PROVIDER);
	// if (gpsStatus) {
	// return true;
	//
	// } else {
	// return false;
	// }
	// }
	//
	// /*----------若GPS关闭则跳转到设置页面 ------------- */
	// protected void alertbox(String title, String mymessage) {
	// AlertDialog.Builder builder = new AlertDialog.Builder(context);
	// builder.setMessage("Your Device's GPS is Disable")
	// .setCancelable(false)
	// .setTitle("** Gps Status **")
	// .setPositiveButton("Gps On",
	// new DialogInterface.OnClickListener() {
	// public void onClick(DialogInterface dialog, int id) {
	// Intent myIntent = new Intent(
	// Settings.ACTION_SECURITY_SETTINGS);
	// context.startActivity(myIntent);
	// dialog.cancel();
	// }
	// })
	// .setNegativeButton("Cancel",
	// new DialogInterface.OnClickListener() {
	// public void onClick(DialogInterface dialog, int id) {
	//
	// dialog.cancel();
	// }
	// });
	// AlertDialog alert = builder.create();
	// alert.show();
	// }
	//
	// /*----------监测GPS位置变化，转换经纬度获取城市------------- */
	// private class MyLocationListener implements LocationListener {
	// @Override
	// public void onLocationChanged(Location loc) {
	//
	// String longitude = "Longitude: " + loc.getLongitude();
	// Log.v(TAG, longitude);
	// String latitude = "Latitude: " + loc.getLatitude();
	// Log.v(TAG, latitude);
	//
	// /*----------转换经纬度获取城市 ------------- */
	// // String cityName=null;
	// // Geocoder gcd = new Geocoder(context, Locale.getDefault());
	// // List<Address> addresses;
	// // try {
	// // addresses = gcd.getFromLocation(loc.getLatitude(),
	// // loc.getLongitude(), 1);
	// // if (addresses.size() > 0)
	// // System.out.println(addresses.get(0).getLocality());
	// // cityName=addresses.get(0).getLocality();
	// // } catch (IOException e) {
	// // e.printStackTrace();
	// // }
	//
	// // 关闭地理位置
	// locationMangaer.removeUpdates(locationListener);
	//
	// // 转换经纬度，获取城市名
	// getLocationInfo(loc.getLongitude(), loc.getLatitude());
	//
	// }
	//
	// @Override
	// public void onProviderDisabled(String provider) {
	// // TODO Auto-generated method stub
	// }
	//
	// @Override
	// public void onProviderEnabled(String provider) {
	// // TODO Auto-generated method stub
	// }
	//
	// @Override
	// public void onStatusChanged(String provider, int status, Bundle extras) {
	// // TODO Auto-generated method stub
	// }
	// }
	//
	// // 转换经纬度，获取城市名（113.528958,22.255711）
	// public void getLocationInfo(double longitude, double latitude) {
	//
	// String url = "http://maps.googleapis.com/maps/api/geocode/json?latlng="
	// + latitude + "," + longitude + "&sensor=true&language=zh-CN";
	//
	// AsyncHttpClient client = new AsyncHttpClient();
	//
	// client.get(context, url, new AsyncHttpResponseHandler() {
	//
	// @Override
	// public void onSuccess(String content) {
	//
	// super.onSuccess(content);
	//
	// try {
	// JSONObject jsonObjecty = new JSONObject(content);
	//
	// if (jsonObjecty != null) {
	//
	// JSONArray citys = (JSONArray) jsonObjecty
	// .getJSONArray("results");
	//
	// if (citys != null) {
	//
	// JSONArray adds = (JSONArray) citys.getJSONObject(0)
	// .getJSONArray("address_components");
	//
	// if (adds != null) {
	//
	// boolean found = false;
	//
	// for (int i = 0; i < adds.length(); i++) {
	//
	// JSONObject object = (JSONObject) adds
	// .get(i);
	//
	// if (object != null) {
	// JSONArray sub = (JSONArray) object
	// .getJSONArray("types");
	// if (sub != null) {
	//
	// for (int j = 0; j < sub.length(); j++) {
	//
	// String locality = sub
	// .getString(j);
	//
	// Log.e(TAG, locality);
	//
	// if (locality
	// .equalsIgnoreCase("locality") == true) {
	//
	// cityName = object
	// .getString("long_name");
	//
	// Log.e(TAG, "Found:"
	// + cityName);
	//
	// found = true;
	//
	// break;
	// }
	// }
	//
	// }
	//
	// }
	//
	// if (found == true) {
	// break;
	// }
	//
	// }
	//
	// }
	//
	// if (handler != null) {
	// handler.completedGSP(cityName);
	// }
	//
	// }
	//
	// }
	//
	// } catch (Exception e) {
	// e.printStackTrace();
	// if (handler != null) {
	// handler.completedGSP(cityName);
	// }
	// }
	//
	// }
	//
	// @Override
	// public void onFailure(Throwable error, String content) {
	//
	// }
	//
	// });
	// }

	/**
	 * 判断用户是否开启
	 * 
	 * @param context
	 * @return
	 */
	public static final boolean isOPen(final Context context) {
		LocationManager locationManager = (LocationManager) context
				.getSystemService(Context.LOCATION_SERVICE);
		// 通过GPS卫星定位，定位级别可以精确到街（通过24颗卫星定位，在室外和空旷的地方定位准确、速度快）
		boolean gps = locationManager
				.isProviderEnabled(LocationManager.GPS_PROVIDER);
		// 通过WLAN或移动网络(3G/2G)确定的位置（也称作AGPS，辅助GPS定位。主要用于在室内或遮盖物（建筑群或茂密的深林等）密集的地方定位）
		boolean network = locationManager
				.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
		if (gps || network) {
			return true;
		}

		return false;
	}

	/**
	 * 强制帮用户打开GPS
	 * 
	 * @param context
	 */
	public static final void openGPS(Context context) {
		Intent GPSIntent = new Intent();
		GPSIntent.setClassName("com.android.settings",
				"com.android.settings.widget.SettingsAppWidgetProvider");
		GPSIntent.addCategory("android.intent.category.ALTERNATIVE");
		GPSIntent.setData(Uri.parse("custom:3"));
		try {
			PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();
		} catch (CanceledException e) {
			e.printStackTrace();
		}
	}
}
